/*
 * Copyright(c) 2018-? the original author[Wien(luweien@aliyun.com)] or authors.
 *
 */
package org.doll.it.linde.domain;

import java.util.List;
import java.util.TreeMap;

import org.doll.it.base.domain.DollDO;
import org.doll.it.linde.enums.DateTypeEnum;
import org.doll.it.linde.enums.FieldTypeEnum;
import org.doll.it.linde.enums.TextTypeEnum;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 字段DO，包含一些全局默认设置
 * 
 * @author Wien(luweien@aliyun.com)
 *
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(callSuper = true)
@Document
public class FieldDO extends DollDO {

	private static final long serialVersionUID = -4073379236990254652L;

	// public
	/**
	 * 名称
	 */
	@Indexed(unique = true)
	private String name;

	/**
	 * 显示名称
	 */
	private String displayName;

	/**
	 * 字段类型
	 */
	private FieldTypeEnum fieldType;

	/**
	 * 图标
	 */
	private String icon;

	/**
	 * 描述
	 */
	private String description;

	/**
	 * 是否只读，如果只读，将不能修改
	 */
	private Boolean readOnly;

	/**
	 * 默认值
	 */
	private String defaultVal;

	/**
	 * 正在使用的该字段的Type
	 */
	private List<Long> usingTypeIds;

	// private

	/**
	 * True的显示别名，比如显示为“是”，“Yes”，“Y”...
	 */
	private String aliasTrue;

	/**
	 * False的显示别名，比如显示为“否”，“No”，“N”...
	 */
	private String aliasFalse;

	/**
	 * 格式
	 */
	private String format;

	/**
	 * 最小值
	 */
	private Double minVal;

	/**
	 * 最大值
	 */
	private Double maxVal;

	/**
	 * 是否无符号。默认有符号（可用表示正负数）
	 */
	private Boolean unsign;

	/**
	 * 小数位数
	 */
	private Integer scale;

	/**
	 * 是否高精度，默认不是，是double
	 */
	private Boolean decimal;

	/**
	 * 是否多值，默认单值
	 */
	private Boolean multiVal;

	/**
	 * 文本类型
	 */
	private TextTypeEnum textType;

	/**
	 * 时间类型
	 */
	private DateTypeEnum dateType;

	/**
	 * 文本显示行数
	 */
	private Integer showRows;

	/**
	 * 选项值
	 */
	private TreeMap<Long, OptionDO> options;

	/**
	 * 附件Ids
	 */
	private List<Long> attachementIds;

	/**
	 * 相反的Id
	 */
	private Long backId;

	/**
	 * 是否左边。true:左边；false:右边
	 */
	private Boolean left;

	/**
	 * 长度
	 */
	private Integer length;
}
